//‼️ 这个viewModel是干啥用的
//✒️✒️封装的Oauth的网络访问工具及函数-抽取网络请求代码到视图模型中
//✒️✒️ 作用二: 加载归档保存的 token，避免重复登录
//
//  UserAccountViewModel.swift
//  WeiboSwift
//
//  Created by Apple13 on 16/7/12.
//  Copyright © 2016年 yupeng. All rights reserved.
//

import UIKit

class UserAccountViewModel: NSObject {
    
    
//MARK: - 单例访问点
    static let shareUserAccount: UserAccountViewModel = UserAccountViewModel()
    
    //获取解档对象
    var userAccount: UserAccount?{
        
        return UserAccount.loadUserAccount()
    }
    
    
    //构造函数私有化
    private override init() {
        super.init()
    }
    

    
    var accessToken: String? {
        //判断accessToken是否为nil,为nil表示没有登陆
        guard let token = userAccount?.access_token else {
                    return nil
        }
        //此处token一定有值
        //判断是否过期-- 拿过期时间与当前的时间进行对比
        let result = userAccount?.expiresDate?.compare(NSDate())
        //判断是否降序排列
        if result == NSComparisonResult.OrderedDescending{
//            print("没有过期,当前时间为:")
//            print(NSDate())
            return token
            
        }else{
            return nil
        }
        
    }

    
//     封装的方法-- 判断accessToken是否为nil,来表示登陆结果
        var isLogin: Bool{
    
            return accessToken != nil
        }

    
    
    //通过授权码(code)获取accessToken
    func requestAccesstoken(code:String,callBack:(isSuccess:Bool)->()){
        
        
        NetWorkTools.shareTools.requestAccesstoken(code) { (response, error) in
            if error != nil{
                
                print(error)
                //✒️✒️新增加的
                callBack(isSuccess: false)
                return
            }
            
            //执行到这里,回调成功
            guard let dict = response as? [String:AnyObject] else{
                print("不是一个正经的json格式")
                callBack(isSuccess: true)
                return
            }
            
            //是正常的字典
            let userAccount = UserAccount(dict:dict)
           
            print(userAccount)
            print("👗👗👗")
            //调用获取用户信息的函数
//‼️ 要调用其他的函数
            self.requsetUserInfo(userAccount,callBack: callBack)
            
        }

    }
    
    
    
//MARK: - 获取用户信息
    private func requsetUserInfo(userAccount:UserAccount,callBack:(isSuccess:Bool)->()){
        
        NetWorkTools.shareTools.requestUserInfo(userAccount) { (response, error) in
            
            if error != nil{
                print(error)
                return
            }
            
            guard let dict = response as? [String:AnyObject] else {
                print("不是正经的json格式")
                return
            }
            
            //执行到这里一定有
            let name = dict["name"]
            let avatar_large = dict["avatar_large"]
            
            //设置用户名和头像
            userAccount.name = name as? String
            userAccount.avatar_large = avatar_large as? String
            
            //保存用户对象
            //✒️✒️此处获得的用户信息不完整
            //‼️ 新增加的代码
        let result   =  userAccount.saveUserAccount()
            print("1⃣️")
            print(userAccount)
            print("1⃣️")
            
            if result{
                callBack(isSuccess: true)
            }else{
                callBack(isSuccess: false)
            }
            
            
        }

    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
}
